//////////////////////////////////////////////////////////////////////////
#pragma once


//////////////////////////////////////////////////////////////////////////
#include "Math/Math.hpp"


namespace Math
{
	template< typename T, typename V > inline
	const T Clamp( const T value, const V low, const V high );


	template< typename T, typename V > inline
	const T Lerp( const T a, const T b, const V per );


	template< typename T, typename M > inline
	const T Hermite( const T& v1, const T& t1, const T& v2, const T& t2, const M s );


	template< typename T > inline
	const T Smooth( const T value );


	template< typename T > inline
	const T Step( const T percentage, const T a );


	template< typename T > inline
	const T Pulse( const T percentage, const T a, const T b );


	template< typename T > inline
	const T SmoothStep( const T percentage, const T a, const T b );


	template< typename T, typename D > inline
	const D Spline( const size_t count, const D knots[], const T x );


	template< typename T > inline
	const T Gamma( const T gamma, const T x );


	template< typename T > inline
	const T Bias( const T b, const T x );


	template< typename T > inline
	const T Gain( const T g, const T x );


	template< typename T > inline
	const T BoxStep( const T a, const T b, const T x );
}


#include "Detail/Utilities_Impl.hpp"
